# -*- coding: utf-8 -*-
"""
数据库初始化模块
@api-version: 1.0.0
"""

from backend.models import db
from backend.models.user import User
from backend.models.session import UserSession
from backend.models.virtual_file import VirtualFile
from backend.models.virtual_storage import VirtualStorage
from backend.models.user_storage_quota import UserStorageQuota
from backend.models.file_operation_log import FileOperationLog
from backend.models.file_share import FileShare
from werkzeug.security import generate_password_hash
from datetime import datetime, timedelta

def init_database():
    """
    初始化数据库
    创建所有表并插入初始数据
    """
    try:
        # 创建所有表
        print("📋 创建数据库表...")
        db.create_all()
        print("✅ 数据库表创建完成")
        
        # 检查是否已有管理员用户
        admin_user = User.query.filter_by(email='admin@example.com').first()
        if not admin_user:
            print("👤 创建默认管理员用户...")
            # 创建默认管理员用户
            # 密码: admin123
            admin_user = User(
                email='admin@example.com',
                password='admin123',  # User模型会自动加密
                nickname='系统管理员',
                role='admin',
                real_name='系统管理员'
            )
            db.session.add(admin_user)
            
            # 创建测试用户
            # 密码: test123
            test_user = User(
                email='test@example.com',
                password='test123',  # User模型会自动加密
                nickname='测试用户',
                role='user',
                real_name='测试用户',
                phone='13800138000'
            )
            db.session.add(test_user)
            
            db.session.commit()
            print("✅ 默认用户创建完成")
            print("   管理员: admin@example.com / admin123")
            print("   测试用户: test@example.com / test123")
        else:
            print("✅ 管理员用户已存在")
            
        # 创建用户存储配额记录
        users = User.query.all()
        for user in users:
            quota = UserStorageQuota.query.filter_by(user_id=user.id).first()
            if not quota:
                # 为每个用户创建默认存储配额 (10GB)
                quota = UserStorageQuota(
                    user_id=user.id,
                    quota_limit=10 * 1024 * 1024 * 1024  # 10GB
                )
                db.session.add(quota)
        
        db.session.commit()
        print("✅ 用户存储配额初始化完成")
        
        print("🎉 数据库初始化完成!")
        return True
        
    except Exception as e:
        print(f"❌ 数据库初始化失败: {str(e)}")
        db.session.rollback()
        return False

def reset_database():
    """
    重置数据库
    删除所有表并重新创建
    """
    try:
        print("⚠️  重置数据库...")
        db.drop_all()
        print("✅ 数据库表删除完成")
        
        return init_database()
        
    except Exception as e:
        print(f"❌ 数据库重置失败: {str(e)}")
        return False

if __name__ == '__main__':
    # 如果直接运行此脚本，则初始化数据库
    from backend.app import create_app
    
    app = create_app()
    with app.app_context():
        init_database()